from fastapi import FastAPI
import typer
from typing import Optional

# 创建 FastAPI 应用
app = FastAPI(title="My FastAPI App")

# 创建 Typer CLI
cli = typer.Typer()

# 定义一个简单的 FastAPI 路由
@app.get("/")
def read_root():
    return {"message": "Hello World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}

# 定义一个简单的 Typer 命令
@cli.command()
def hello(name: str):
    """简单的问候命令"""
    typer.echo(f"Hello {name}")

@cli.command()
def init_db():
    """初始化数据库"""
    # 这里可以添加数据库初始化逻辑
    typer.echo("数据库初始化完成")

# 运行 FastAPI 应用
def run_server(host: str = "127.0.0.1", port: int = 8000):
    import uvicorn
    uvicorn.run("main:app", host=host, port=port, reload=True)

# 添加运行服务器的子命令
@cli.command()
def run(host: str = "127.0.0.1", port: int = 8000):
    """运行 FastAPI 开发服务器"""
    typer.echo(f"启动服务器在 {host}:{port}")
    run_server(host, port)

if __name__ == "__main__":
    cli()